import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;

/**
 * @author 罗俊华
 * @date 2021/7/26 - 9:21 上午
 */
public class StreamLearning {

    /**
     * java实战 p111
     * 生成由 0-> 100 组成的勾股数
     *
     * @param args
     */
    public static void main(String[] args) {

        /*
         StreamA 必须要先装箱再调用 flatMap 方法，
         因为 IntSteam 调用 flatMap 只能得到结果为 int 类型的数据
         但我们这里需要的是一个数组，不是int，所以要封装为 Integer
         */
        List<int[]> collect = IntStream.range(1, 100).boxed().flatMap((Integer a) -> {

//            平方计算两次，占用内存少
            /*return IntStream.range(1, 100).filter((int b) -> {
                return Math.sqrt(a * a + b * b) % 1 == 0;
            }).mapToObj((int b) -> {
                return new int[]{a, b, (int) Math.sqrt(a * a + b * b)};
            });*/

//            平方计算一次，占用内存多
            return IntStream.range(a, 100).mapToObj((int b) -> {
                return new double[]{a, b, Math.sqrt(a * a + b * b)};
            }).filter((double[] array) -> {
                return array[2] % 1 == 0;
            }).map((double[] array) -> {
                return new int[]{(int) array[0], (int) array[1], (int) array[2]};
            });

        }).collect(Collectors.toList());

        collect.forEach(a -> {
            System.out.printf("%d,%d,%d\n", a[0], a[1], a[2]);
        });


    }
}
